home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
nrpas13.zip
/
GAULEG.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-04-29
|
959b
|
35 lines
PROCEDURE gauleg(x1,x2: double; VAR x,w: darray; n: integer);
(* Programs using routine GAULEG must define the type
TYPE
darray=ARRAY [1..n] OF double;
in the calling program *)
CONST
eps = 3.0e-11; (* adjust to your floating precision *)
VAR
m,j,i: integer;
z1,z,xm,xl,pp,p3,p2,p1: double;
BEGIN
m := (n+1) DIV 2;
xm := 0.5*(x2+x1);
xl := 0.5*(x2-x1);
FOR i := 1 TO m DO BEGIN
z := cos(3.141592654*(i-0.25)/(n+0.5));
REPEAT
p1 := 1.0;
p2 := 0.0;
FOR j := 1 TO n DO BEGIN
p3 := p2;
p2 := p1;
p1 := ((2.0*j-1.0)*z*p2-(j-1.0)*p3)/j
END;
pp := n*(z*p1-p2)/(z*z-1.0);
z1 := z;
z := z1-p1/pp;
UNTIL (abs(z-z1) <= eps);
x[i] := xm-xl*z;
x[n+1-i] := xm+xl*z;
w[i] := 2.0*xl/((1.0-z*z)*pp*pp);
w[n+1-i] := w[i]
END
END;